package com.example.demoweb.proxy.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

import com.example.demoweb.proxy.Car;
import com.example.demoweb.proxy.Moveable;

public class Test {
	public static void main(String[] args){
		//创建要被代理的类
		Car car = new Car();
		//创建一个类,实现InvocationHandler接口,并且必须实现其invoke方法,在实现invocation方法时添加自己的逻辑
		InvocationHandler h = new TimeHandler(car);
		Class<?> cls = car.getClass();
		/*
		 * 参数
		 * loader 类加载器
		 * interfaces 实现接口
		 * h invocaHandler 实现处理器
		 */
		//TODO 返回值为什么用 Moveable这个借口来接收,为什么不能用实现类来接收?就是因为"它创建的代理实现了interfaces接口"?那Car也是实现了Moveable接口,为什么会报错?
		Moveable m = (Moveable)Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), h);
		//这里调用move方法的时候,是通过TimeHandler 的 invoke 方法去调用的,所以会有TimeHandler 中invoke里面的逻辑 
		//Moveable m 已经是一个代理类
		m.move();
		m.fuck();
	}
}
